Add Coastal Explorer courtesy justinbr of earthlink.net.
authorrobertl <robertl@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Tue, 9 Nov 2004 17:56:59 +0000 (17:56 +0000)
committerrobertl <robertl@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Tue, 9 Nov 2004 17:56:59 +0000 (17:56 +0000)
(Yes, it leaks...)

gpsbabel/Makefile
gpsbabel/README
gpsbabel/coastexp.c [new file with mode: 0755]
gpsbabel/reference/coastexp.nob [new file with mode: 0755]
gpsbabel/reference/coastexp.ref [new file with mode: 0755]
gpsbabel/testo
gpsbabel/vecs.c

index 22016bbec833f6fb25bcda36dec75e7887d4f3bd..970258f55e57d0da43983c6f0bb86231cb43b2c6 100644 (file)
@@ -25,7 +25,7 @@ FMTS=magproto.o gpx.o geo.o mapsend.o mapsource.o garmin_tables.o \
        xcsv.o gcdb.o tiger.o internal_styles.o easygps.o quovadis.o \
        gpilots.o saroute.o navicache.o psitrex.o geoniche.o delgpl.o \
        ozi.o nmea.o text.o html.o palmdoc.o netstumbler.o hsa_ndv.o \
-       igc.o brauniger_iq.o shape.o hiketech.o glogbook.o
+       igc.o brauniger_iq.o shape.o hiketech.o glogbook.o coastexp.o
 
 FILTERS=position.o duplicate.o arcdist.o polygon.o smplrout.o reverse_route.o sort.o stackfilter.o
 
index dd1dead2797b24fc816b8bc6fd792a67be16857d..fb6bf589428f6d4583eae5d1981964419d6c003d 100644 (file)
@@ -473,6 +473,13 @@ THE FORMATS
 
        http://www.navicache.com/cgi-bin/ib312a/ikonboard.cgi?act=ST;f=23;t=334
 
+    coastexp
+
+       This is the XML format used by CoastalExplorer (tm). For the moment
+       this is only available as an input format.
+
+       http://www.rosepointnav.com
+
     PsiTrex
        
        This is a text format created by KuDaTa's PsiTrex program for the Psion
diff --git a/gpsbabel/coastexp.c b/gpsbabel/coastexp.c
new file mode 100755 (executable)
index 0000000..b8e19ec
--- /dev/null
@@ -0,0 +1,421 @@
+/*
+    Copyright (C) 2004 Justin Broughton, justinbr@earthlink.net
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+#include "defs.h"
+#if !NO_EXPAT
+#include <expat.h>
+static XML_Parser psr;
+#endif
+
+FILE *fd;
+FILE *ofd;
+
+#define MYNAME "coastexp"
+#define MY_CBUF 4096
+
+#if NO_EXPAT
+void
+ce_rd_init(const char *fname)
+{
+       fatal(MYNAME ": This build excluded CoastalExplorer support because expat was not installed.\n");
+}
+
+void
+ce_read(void)
+{
+}
+#else
+
+static char *element; // Current element being parsed
+static char *cdatastr; // Current XML character data being built up (until a <lf>)
+
+/* CE-specific mark structure - used for both route marks and standalone marks */
+struct CE_MARK {
+       struct CE_MARK *next;   // pointer to next mark in list
+       char *id;               // CE's mark ID (of the form "{<guid>}")
+       waypoint *wp;           // GPSBabel waypoint
+       int used;               // Is this mark used in a route or not?
+};
+typedef struct CE_MARK ce_mark;
+
+/* CE-specific route structure */
+struct CE_ROUTE {
+       struct CE_ROUTE *next;  // pointer to next route in list
+       char *id;               // CE's route ID (of the form "{<guid>}")
+       route_head *r;          // GPSBabel route header
+       ce_mark *marks;         // list of CE marks in this route
+};
+typedef struct CE_ROUTE ce_route;
+
+static ce_route *routes = NULL;                // List of routes currently found
+static ce_route *currentRoute = NULL;  // Current route being processed
+static ce_mark *marks = NULL;          // List of stand-alone marks currently found
+static ce_mark *currentMark = NULL;    // Current mark being processed
+static int inRoute = 0;                        // Are we processing a route?
+static int inMark = 0;                 // Are we processing a mark?
+
+/* Add a route to the list of routes */
+static void
+add_route(ce_route *route)
+{
+       if (routes == NULL) {
+               routes = route;
+       } else {
+               ce_route *curr = routes;
+               while (curr->next != NULL)
+                       curr = curr->next;
+               curr->next = route;
+       }
+}
+
+/* Add a mark to the list of stand-alone marks */
+static void
+add_mark(ce_mark *mark)
+{
+       if (marks == NULL) {
+               marks = mark;
+       } else {
+               ce_mark *curr = marks;
+               while (curr->next != NULL)
+                       curr = curr->next;
+               curr->next = mark;
+       }
+}
+
+/* Add a mark to the specified route */
+static void
+add_mark_to_route(ce_route *route, ce_mark *mark)
+{
+       if (route->marks == NULL) {
+               route->marks = mark;
+       } else {
+               ce_mark *curr = route->marks;
+               while (curr->next != NULL)
+                       curr = curr->next;
+               curr->next = mark;
+       }
+}
+
+/* Start processing an XML item */
+static void
+ce_start(void *data, const char *el, const char **attr)
+{
+       element = xstrdup(el);
+       if (0 == strcmp(el, "Route")) {
+               inRoute = 1;
+               const char **ap;
+               for (ap = attr; *ap; ap+=2) {
+                       if (0 == strcmp(ap[0], "id")) {
+                               // Create a CE route object and add it to the list of routes
+                               currentRoute = (ce_route *) xcalloc(sizeof (ce_route), 1);
+                               currentRoute->next = NULL;
+                               currentRoute->id=xstrdup(ap[1]);
+                               currentRoute->r = route_head_alloc();
+                               currentRoute->marks = NULL;
+                               add_route(currentRoute);
+                       }
+               }
+       } else if (0 == strcmp(el, "Mark")) {
+               inMark = 1;
+               const char **ap;
+               for (ap = attr; *ap; ap+=2) {
+                       if (0 == strcmp(ap[0], "id")) {
+                               // Create a CE mark object and add it to the list of stand-alone marks
+                               currentMark = (ce_mark *) xcalloc(sizeof (ce_mark), 1);
+                               currentMark->next = NULL;
+                               currentMark->id=xstrdup(ap[1]);
+                               currentMark->wp = NULL;
+                               currentMark->used = 0;
+                               add_mark(currentMark);
+                       }
+               }
+       }
+}
+
+/* Finish processing an XML item */
+static void
+ce_end(void *data, const char *el)
+{
+       if (0 == strcmp(el, "Route"))
+               inRoute = 0;
+       else if (0 == strcmp(el, "Mark"))
+               inMark = 0;
+}
+
+/* Process some XML character data for the current item */
+static void
+ce_cdata(void *dta, const XML_Char *s, int len)
+{
+       if (*s != '\n') {
+               // We buffer up characters in 'cdatastr' until a single <lf> is received
+               if ((strlen(cdatastr) + len) > MY_CBUF) {
+                       printf("Buffer overflow - line too long!");
+                       exit(-1);
+               }
+               char *edatastr = cdatastr+strlen(cdatastr);
+               memcpy(edatastr, s, len);
+               edatastr[len] = '\0';
+       } else {
+               // Now process what we have in 'cdatastr'
+               s = cdatastr;
+               while (*s != '\0' && (*s == '\b' || *s == '\t'))
+                       s++;
+               if (strlen(s) <= 0)
+                       return;
+               if (0 == strcmp(element, "Marks")) {
+                       if (inRoute == 1) {
+                               // We are processing the marks in a route so create a CE mark object
+                               // and add it to the current route
+                               ce_mark *mark = (ce_mark *) xcalloc(sizeof (ce_mark), 1);
+                               mark->next = NULL;
+                               mark->id = xstrdup(s);
+                               mark->wp = NULL;
+                               add_mark_to_route(currentRoute, mark);
+                       }
+               } else if (0 == strcmp(element, "Position")) {
+                       if (inMark == 1) {
+                               // We are processing a standalone mark so read the lat/long position
+                               // and create a waypoint to add to the current mark
+                               char *position = xstrdup(s);
+                               char *lat = position;
+                               char *latNorS = position;
+                               while (*latNorS != ' ')
+                                       latNorS++;
+                               *latNorS++ = '\0';
+                               char *lng = latNorS;
+                               lng++; lng++;
+                               char *longEorW = lng;
+                               while (*longEorW != ' ')
+                                       longEorW++;
+                               *longEorW++ = '\0';
+                               currentMark->wp = waypt_new();
+                               currentMark->wp->latitude = atof(lat);
+                               if (*latNorS == 'S')
+                                       currentMark->wp->latitude = -currentMark->wp->latitude;
+                               currentMark->wp->longitude = atof(lng);
+                               if (*longEorW == 'W')
+                                       currentMark->wp->longitude = -currentMark->wp->longitude;
+                       }
+               } else if (0 == strcmp(element, "Name")) {
+                       // Names we care about may be either for routes or marks
+                       char *name = xstrdup(s);
+                       if (inMark == 1)
+                               currentMark->wp->shortname = name;
+                       else if (inRoute == 1)
+                               currentRoute->r->rte_name = name;
+               } else if (0 == strcmp(element, "Description")) {
+                       // Descriptions we care about may be either for routes or marks
+                       char *desc = xstrdup(s);
+                       if (inMark == 1)
+                               currentMark->wp->description = desc;
+                       else if (inRoute == 1)
+                               currentRoute->r->rte_desc = desc;
+               }
+
+               // Start building a new string since we are done with this one
+               cdatastr[0] = '\0';
+       }
+}
+
+/* Set up reading the CE input file */
+void
+ce_rd_init(const char *fname)
+{
+       fd = xfopen(fname, "r", MYNAME);
+
+       psr = XML_ParserCreate(NULL);
+       if (!psr) {
+               fatal(MYNAME ":Cannot create XML parser\n");
+       }
+
+       XML_SetElementHandler(psr, ce_start, ce_end);
+       cdatastr = xcalloc(MY_CBUF,1);
+       XML_SetCharacterDataHandler(psr, ce_cdata);
+}
+
+/* Parse the input file */
+void
+ce_read(void)
+{
+       int len;
+       char buf[MY_CBUF];
+
+       while ((len = fread(buf, 1, sizeof(buf), fd))) {
+               if (!XML_Parse(psr, buf, len, feof(fd))) {
+                       fatal(MYNAME ":Parse error at %d: %s\n",
+                               XML_GetCurrentLineNumber(psr),
+                               XML_ErrorString(XML_GetErrorCode(psr)));
+               }
+       }
+
+       XML_ParserFree(psr);
+}
+
+#endif
+
+/* Fix waypoints in route marks from the standalone marks */
+void
+ce_fix_waypoints(void)
+{
+       ce_route *route = routes;
+       while (route != NULL) {
+               ce_mark *mark = route->marks;
+               while (mark != NULL) {
+                       ce_mark *mark2 = marks;
+                       while (mark2 != NULL) {
+                               if (0 == strcmp(mark->id, mark2->id)) {
+                                       mark->wp = mark2->wp;
+                                       mark2->used = 1;
+                                       break;
+                               }
+                               mark2 = mark2->next;
+                       }
+                       mark = mark->next;
+               }
+               route = route->next;
+       }
+}
+
+/* Check route name and if NULL assign a name */
+void
+ce_check_route_names(void)
+{
+       ce_route *route = routes;
+       while (route != NULL) {
+               if (route->r->rte_name == NULL) {
+                       cdatastr = '\0';
+                       strcat(cdatastr, marks->wp->shortname);
+                       strcat(cdatastr, "->");
+                       ce_mark *mark = route->marks;
+                       while (mark->next != NULL)
+                               mark = mark->next;
+                       strcat(cdatastr, mark->wp->shortname);
+                       route->r->rte_name = xstrdup(cdatastr);
+               }
+               route = route->next;
+       }
+}
+
+/* Remove marks used in routes */
+void
+ce_remove_unused_marks(void)
+{
+       ce_mark *mark = marks;
+       ce_mark *prev_mark = NULL;
+       while (mark != NULL) {
+               if (mark->used == 1) {
+                       if (prev_mark == NULL)
+                               marks = mark = mark->next;
+                       else
+                               prev_mark->next = mark = mark->next;
+                       continue;
+               }
+               prev_mark = mark;
+               mark = mark->next;
+       }
+}
+
+/* Print out results */
+void
+ce_print_results(void)
+{
+       ce_route *curr_route = routes;
+       while (curr_route != NULL) {
+               printf("Route name=%s id=%s\n", curr_route->r->rte_name, curr_route->id);
+               ce_mark *curr_mark = curr_route->marks;
+               while (curr_mark != NULL) {
+                       if (curr_mark->wp == NULL)
+                               printf("  null\n");
+                       else
+                               printf("  %s (%f, %f)\n", curr_mark->wp->shortname, curr_mark->wp->latitude, curr_mark->wp->longitude);
+                       curr_mark = curr_mark->next;
+               }
+               curr_route = curr_route->next;
+       }
+       ce_mark *curr_mark = marks;
+       while (curr_mark != NULL) {
+               printf("Mark name=%s id=%s ", curr_mark->wp->shortname, curr_mark->id);
+               if (curr_mark->wp == NULL)
+                       printf("(null)\n");
+               else
+                       printf("(%f, %f)\n", curr_mark->wp->latitude, curr_mark->wp->longitude);
+               curr_mark = curr_mark->next;
+       }
+}
+
+/* Finish reading the input file */
+void
+ce_rd_deinit(void)
+{
+       ce_fix_waypoints();
+       ce_check_route_names();
+       ce_remove_unused_marks();
+       // ce_print_results();
+
+       // Add routes to GPSBabel
+       ce_route *route = routes;
+       while (route != NULL) {
+               route_add_head(route->r);
+               ce_mark *mark = route->marks;
+               while (mark->next != NULL) {
+                       route_add_wpt(route->r, mark->wp);
+                       mark = mark->next;
+               }
+               route = route->next;
+       }
+
+       // Add (unused) marks to GPSBabel
+       ce_mark *mark = marks;
+       while (mark != NULL) {
+               waypt_add(mark->wp);
+               mark = mark->next;
+       }
+
+       fclose(fd);
+}
+
+void
+ce_wr_init(const char *fname)
+{
+       fatal(MYNAME ": Does not support writing CoastalExplorer files.\n");
+       ofd = xfopen(fname, "w", MYNAME);
+}
+
+void
+ce_wr_deinit(void)
+{
+       fclose(ofd);
+}
+
+void
+ce_write(void)
+{
+}
+
+ff_vecs_t coastexp_vecs = {
+       ff_type_file,
+       ce_rd_init,
+       ce_wr_init,
+       ce_rd_deinit,
+       ce_wr_deinit,
+       ce_read,
+       ce_write,
+       NULL,
+       NULL,
+};
diff --git a/gpsbabel/reference/coastexp.nob b/gpsbabel/reference/coastexp.nob
new file mode 100755 (executable)
index 0000000..8991756
--- /dev/null
@@ -0,0 +1,370 @@
+<?xml version="1.0"?>\r
+<NavObjectCollection created="20041105T170900Z">\r
+       <Name>Navigation Objects</Name>\r
+       <Visible>true</Visible>\r
+       <ViewSettings created="20041105T171914Z">\r
+               <Position>34.867273 N 120.589158 W</Position>\r
+               <Scale>98208.414698</Scale>\r
+               <Quilting>true</Quilting>\r
+               <ShowVectorCharts>true</ShowVectorCharts>\r
+       </ViewSettings>\r
+       <Route created="20041105T170906Z" id="{58384b15-2ed7-4cee-a827-368917b2c743}">\r
+               <Marks>\r
+                       {76e5356a-d5fc-4437-8649-026416c2b185}\r
+                       {d5dbd16f-eeba-4f61-b38f-582b584e5db3}\r
+                       {9816402a-51a6-4fd5-8c08-b680d23d7911}\r
+                       {427ed2ff-bdbb-4d77-b859-1f1eff10c961}\r
+                       {0ead9569-64f0-4fb8-9545-4fa3191bbab0}\r
+                       {fbe5b26d-b111-4208-ac70-f22b169d9c3e}\r
+                       {68cfe23d-2ebf-4075-9726-f743659c7df5}\r
+                       {50740d73-e743-4197-a6a0-29ad3114107a}\r
+                       {26ae0ba0-a73e-4600-b51a-546d7099c809}\r
+                       {b7266cd5-817b-4674-862e-490230a2f925}\r
+               </Marks>\r
+               <RouteLeg created="20041105T170909Z" id="{0699ae10-6257-4d1d-b6e7-37fe694dac26}">\r
+                       <PlannedSpeed>5.0 kn</PlannedSpeed>\r
+               </RouteLeg>\r
+               <RouteLeg created="20041105T170910Z" id="{03dd3451-7040-4e6f-aeb7-6ed6b87612b8}">\r
+                       <PlannedSpeed>5.0 kn</PlannedSpeed>\r
+               </RouteLeg>\r
+               <RouteLeg created="20041105T170913Z" id="{87a407a6-11a5-4b5e-a55e-8484e47da0ee}">\r
+                       <PlannedSpeed>5.0 kn</PlannedSpeed>\r
+               </RouteLeg>\r
+               <RouteLeg created="20041105T170916Z" id="{421115ff-a94a-48f4-acd1-36cf3387e79b}">\r
+                       <PlannedSpeed>5.0 kn</PlannedSpeed>\r
+               </RouteLeg>\r
+               <RouteLeg created="20041105T170920Z" id="{2c587ebf-4e0c-43ad-ae89-4da44819b093}">\r
+                       <PlannedSpeed>5.0 kn</PlannedSpeed>\r
+               </RouteLeg>\r
+               <RouteLeg created="20041105T170926Z" id="{a653ca32-e125-4377-8b86-b254f414ca86}">\r
+                       <PlannedSpeed>5.0 kn</PlannedSpeed>\r
+               </RouteLeg>\r
+               <RouteLeg created="20041105T170927Z" id="{4d32d150-2a89-46d6-993f-1fe54a8f62dc}">\r
+                       <PlannedSpeed>5.0 kn</PlannedSpeed>\r
+               </RouteLeg>\r
+               <RouteLeg created="20041105T211624Z" id="{3bf50ccf-2d8a-46dc-9574-3fe7ca55f8fc}">\r
+                       <PlannedSpeed>5.0 kn</PlannedSpeed>\r
+               </RouteLeg>\r
+               <RouteLeg created="20041105T170929Z" id="{eb96f93d-6367-4ccf-9850-d84bb5227022}">\r
+                       <PlannedSpeed>5.0 kn</PlannedSpeed>\r
+               </RouteLeg>\r
+               <RouteLeg created="20041105T170930Z" id="{74f699b8-8b59-4d9a-9656-11877a0a0dcc}">\r
+                       <PlannedSpeed>5.0 kn</PlannedSpeed>\r
+               </RouteLeg>\r
+               <DisplayLegRangeBearing>true</DisplayLegRangeBearing>\r
+               <TotalLength>39.06 NM</TotalLength>\r
+               <StartTime>20050516T070000</StartTime>\r
+               <StartAt>first-waypoint</StartAt>\r
+               <Name>Into The Bay</Name>\r
+       </Route>\r
+       <Mark created="20041105T170909Z" id="{76e5356a-d5fc-4437-8649-026416c2b185}">\r
+               <Position>37.763290 N 122.282580 W</Position>\r
+               <Icon>Home</Icon>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>-51,-21</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>SFBALBAY</Name>\r
+       </Mark>\r
+       <Mark created="20041105T170910Z" id="{d5dbd16f-eeba-4f61-b38f-582b584e5db3}">\r
+               <Position>37.751613 N 122.339028 W</Position>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>-58,4</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>SFBAY001</Name>\r
+       </Mark>\r
+       <Mark created="20041105T170913Z" id="{9816402a-51a6-4fd5-8c08-b680d23d7911}">\r
+               <Position>37.817420 N 122.394305 W</Position>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>-9,-19</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>SFBAY002</Name>\r
+       </Mark>\r
+       <Mark created="20041105T170916Z" id="{427ed2ff-bdbb-4d77-b859-1f1eff10c961}">\r
+               <Position>37.819339 N 122.478302 W</Position>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>-53,-21</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>SFGGBRDG</Name>\r
+       </Mark>\r
+       <Mark created="20041105T170920Z" id="{0ead9569-64f0-4fb8-9545-4fa3191bbab0}">\r
+               <Position>37.773033 N 122.605838 W</Position>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>-92,-13</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>SFCHNL01</Name>\r
+       </Mark>\r
+       <Mark created="20041105T170926Z" id="{fbe5b26d-b111-4208-ac70-f22b169d9c3e}">\r
+               <Position>37.518860 N 122.529914 W</Position>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>-98,-4</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>HMCOLREF</Name>\r
+       </Mark>\r
+       <Mark created="20041105T170927Z" id="{68cfe23d-2ebf-4075-9726-f743659c7df5}">\r
+               <Position>37.482348 N 122.507704 W</Position>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>-77,1</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>HMPILL01</Name>\r
+       </Mark>\r
+       <Mark created="20041105T170929Z" id="{26ae0ba0-a73e-4600-b51a-546d7099c809}">\r
+               <Position>37.476448 N 122.475800 W</Position>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>13,-1</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>HMPILL02</Name>\r
+       </Mark>\r
+       <Mark created="20041105T170930Z" id="{b7266cd5-817b-4674-862e-490230a2f925}">\r
+               <Position>37.495102 N 122.483927 W</Position>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>-91,-4</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>HMPILL03</Name>\r
+       </Mark>\r
+       <Mark created="20041105T211300Z" id="{5bf0873d-5c50-4ad4-8c36-e8d90b068908}">\r
+               <Position>37.229349 N 122.441589 W</Position>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>-95,-4</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>PESCDR01</Name>\r
+       </Mark>\r
+       <Mark created="20041105T211324Z" id="{625fb518-f83b-4e24-add2-852544d6fc52}">\r
+               <Position>37.183397 N 122.411904 W</Position>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>-90,-2</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>PIGEON01</Name>\r
+       </Mark>\r
+       <Mark created="20041105T211341Z" id="{1677d889-5a9e-463e-b398-03da7165d31d}">\r
+               <Position>37.090736 N 122.348775 W</Position>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>-89,0</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>ANONUV01</Name>\r
+       </Mark>\r
+       <Mark created="20041105T211409Z" id="{aac62a78-9a10-4c98-b057-3bd05cb667c2}">\r
+               <Position>36.929502 N 122.113725 W</Position>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>-51,4</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>SCRUZ01</Name>\r
+       </Mark>\r
+       <Mark created="20041105T211416Z" id="{2972124d-66f4-48a7-932d-2100eb3f5f6d}">\r
+               <Position>36.934235 N 122.022130 W</Position>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>22,-8</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>SCRUZ02</Name>\r
+       </Mark>\r
+       <Mark created="20041105T211420Z" id="{aabdee59-c849-4eaf-8005-b1e814650244}">\r
+               <Position>36.960666 N 122.024734 W</Position>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>22,-9</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>SCRUZENT</Name>\r
+       </Mark>\r
+       <Mark created="20041105T211624Z" id="{50740d73-e743-4197-a6a0-29ad3114107a}">\r
+               <Position>37.475062 N 122.488531 W</Position>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>-44,5</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>HMPILLPT</Name>\r
+       </Mark>\r
+       <Mark created="20041105T212422Z" id="{83540001-9f5d-4cb5-8218-51bfaeb7b3e8}">\r
+               <Position>36.581344 N 121.995411 W</Position>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>-95,-7</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>CYPRSSPT</Name>\r
+       </Mark>\r
+       <Mark created="20041105T212438Z" id="{311a8303-dc05-497d-aaa6-d4cba53e3464}">\r
+               <Position>36.301110 N 121.919097 W</Position>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>-67,-3</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>PTSUR</Name>\r
+       </Mark>\r
+       <Mark created="20041105T212515Z" id="{2a7de189-ea1b-46d5-a168-d9ada708f50b}">\r
+               <Position>36.238177 N 121.855209 W</Position>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>-72,3</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>COOPERPT</Name>\r
+       </Mark>\r
+       <Mark created="20041105T212526Z" id="{3d6f3fe8-bc77-4d0b-9b4d-7fe1e41c5691}">\r
+               <Position>36.225175 N 121.801314 W</Position>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>-91,-8</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>PFEIFENT</Name>\r
+       </Mark>\r
+       <Mark created="20041105T212531Z" id="{12481c1c-7f84-48d7-a7ad-ac613a036cea}">\r
+               <Position>36.230449 N 121.797444 W</Position>\r
+               <Icon>Anchor</Icon>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>-85,-14</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>PFEIFANC</Name>\r
+       </Mark>\r
+       <Mark created="20041105T212826Z" id="{d04c1156-4ca6-4b79-8177-929796c0c330}">\r
+               <Position>35.879801 N 121.498947 W</Position>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>10,-15</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>SANMRT01</Name>\r
+       </Mark>\r
+       <Mark created="20041105T212833Z" id="{724553f0-6d4a-48c7-9813-c61d1b9e64f3}">\r
+               <Position>35.652801 N 121.308485 W</Position>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>-75,2</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>PDRSBLNC</Name>\r
+       </Mark>\r
+       <Mark created="20041105T212850Z" id="{3f52e80e-0c8d-4e8f-ba57-0b99ff5a1b41}">\r
+               <Position>35.623297 N 121.185920 W</Position>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>-102,-6</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>SNSMNENT</Name>\r
+       </Mark>\r
+       <Mark created="20041105T212853Z" id="{409cc119-ed3f-4d02-8ccc-c738dcbdd96b}">\r
+               <Position>35.640478 N 121.183772 W</Position>\r
+               <Icon>Anchor</Icon>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>-105,-9</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>SNSMNANC</Name>\r
+       </Mark>\r
+       <Mark created="20041105T213618Z" id="{6d0a144a-6ce0-466c-9af4-478bc375580c}">\r
+               <Position>35.572353 N 121.152797 W</Position>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>-80,-1</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>CAMBRIA</Name>\r
+       </Mark>\r
+       <Mark created="20041105T213626Z" id="{3d9062c5-e059-457d-859c-549dea0c101f}">\r
+               <Position>35.449214 N 121.020825 W</Position>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>14,-14</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>PTESTERO</Name>\r
+       </Mark>\r
+       <Mark created="20041105T213635Z" id="{8f66e2de-fa62-43d5-af69-44724867429b}">\r
+               <Position>35.216602 N 120.928391 W</Position>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>-96,-3</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>PTBUCHON</Name>\r
+       </Mark>\r
+       <Mark created="20041105T213642Z" id="{15b56103-0d91-446a-9e0f-0d5817581f9b}">\r
+               <Position>34.883361 N 120.684631 W</Position>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>-57,3</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>PTSAL01</Name>\r
+       </Mark>\r
+       <Mark created="20041105T213647Z" id="{361b3cd3-1e77-4867-b956-d01b152ed22d}">\r
+               <Position>34.884641 N 120.652026 W</Position>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>-96,-8</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>PTSALENT</Name>\r
+               <Description>A description of the Point Sal Entrance mark</Description>\r
+       </Mark>\r
+       <Mark created="20041105T213704Z" id="{4d6b54b8-b3e5-42f0-ab33-f90b60752bcd}">\r
+               <Position>34.896555 N 120.649124 W</Position>\r
+               <Icon>Anchor</Icon>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>-96,-10</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>PTSALANC</Name>\r
+       </Mark>\r
+       <Mark created="20041105T213949Z" id="{d5bfc894-670e-47c7-9a0f-74e406fdf3ca}">\r
+               <Position>34.758180 N 120.642516 W</Position>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>22,-8</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>PURSMAPT</Name>\r
+       </Mark>\r
+       <Mark created="20041105T213954Z" id="{682a9c6d-a632-4e8b-acd8-42d156a2fe3e}">\r
+               <Position>34.572579 N 120.663636 W</Position>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>-97,-7</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>PTARGLLO</Name>\r
+       </Mark>\r
+       <Mark created="20041105T214005Z" id="{8787e521-19cb-400a-9efc-1b8863b70132}">\r
+               <Position>34.113844 N 120.492630 W</Position>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>20,-11</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>SANMGL01</Name>\r
+       </Mark>\r
+       <Mark created="20041105T214044Z" id="{33aa93e4-da08-42c6-a42c-49cf71eff499}">\r
+               <Position>34.029483 N 120.471409 W</Position>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>-88,0</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>SANMGL02</Name>\r
+       </Mark>\r
+       <Mark created="20041105T214048Z" id="{61fe867b-1b99-49b1-8188-adda5069cccf}">\r
+               <Position>34.019184 N 120.444197 W</Position>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>-32,5</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>SANMGL03</Name>\r
+       </Mark>\r
+       <Mark created="20041105T214057Z" id="{b3dc7ee2-ffe1-458d-be60-b3a92f089ae4}">\r
+               <Position>34.023478 N 120.438209 W</Position>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>19,-4</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>ADCOVENT</Name>\r
+       </Mark>\r
+       <Mark created="20041105T214059Z" id="{d2e24f39-796a-4853-8d3a-32106be5e2b7}">\r
+               <Position>34.028615 N 120.439696 W</Position>\r
+               <Icon>Anchor</Icon>\r
+               <ArrivalCircleRadius>0.05 NM</ArrivalCircleRadius>\r
+               <RangeCircleRadius>0 NM</RangeCircleRadius>\r
+               <NameOffset>-102,-5</NameOffset>\r
+               <DescriptionOffset>0,24</DescriptionOffset>\r
+               <Name>ADCOVANC</Name>\r
+       </Mark>\r
+</NavObjectCollection>\r
diff --git a/gpsbabel/reference/coastexp.ref b/gpsbabel/reference/coastexp.ref
new file mode 100755 (executable)
index 0000000..2456842
--- /dev/null
@@ -0,0 +1,180 @@
+<?xml version="1.0"?>
+<gpx
+ version="1.0"
+creator="GPSBabel - http://www.gpsbabel.org"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xmlns="http://www.topografix.com/GPX/1/0"
+xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
+<time>1970-01-01T00:00:00Z</time>
+<bounds minlat="34.019184000" minlon ="-122.441589000" maxlat="37.229349000" maxlon="-120.438209000" />
+<wpt lat="37.229349000" lon="-122.441589000">
+  <name>PESCDR01</name>
+  <cmt>PESCDR01</cmt>
+  <desc>PESCDR01</desc>
+</wpt>
+<wpt lat="37.183397000" lon="-122.411904000">
+  <name>PIGEON01</name>
+  <cmt>PIGEON01</cmt>
+  <desc>PIGEON01</desc>
+</wpt>
+<wpt lat="37.090736000" lon="-122.348775000">
+  <name>ANONUV01</name>
+  <cmt>ANONUV01</cmt>
+  <desc>ANONUV01</desc>
+</wpt>
+<wpt lat="36.929502000" lon="-122.113725000">
+  <name>SCRUZ01</name>
+  <cmt>SCRUZ01</cmt>
+  <desc>SCRUZ01</desc>
+</wpt>
+<wpt lat="36.934235000" lon="-122.022130000">
+  <name>SCRUZ02</name>
+  <cmt>SCRUZ02</cmt>
+  <desc>SCRUZ02</desc>
+</wpt>
+<wpt lat="36.960666000" lon="-122.024734000">
+  <name>SCRUZENT</name>
+  <cmt>SCRUZENT</cmt>
+  <desc>SCRUZENT</desc>
+</wpt>
+<wpt lat="36.581344000" lon="-121.995411000">
+  <name>CYPRSSPT</name>
+  <cmt>CYPRSSPT</cmt>
+  <desc>CYPRSSPT</desc>
+</wpt>
+<wpt lat="36.301110000" lon="-121.919097000">
+  <name>PTSUR</name>
+  <cmt>PTSUR</cmt>
+  <desc>PTSUR</desc>
+</wpt>
+<wpt lat="36.238177000" lon="-121.855209000">
+  <name>COOPERPT</name>
+  <cmt>COOPERPT</cmt>
+  <desc>COOPERPT</desc>
+</wpt>
+<wpt lat="36.225175000" lon="-121.801314000">
+  <name>PFEIFENT</name>
+  <cmt>PFEIFENT</cmt>
+  <desc>PFEIFENT</desc>
+</wpt>
+<wpt lat="36.230449000" lon="-121.797444000">
+  <name>PFEIFANC</name>
+  <cmt>PFEIFANC</cmt>
+  <desc>PFEIFANC</desc>
+</wpt>
+<wpt lat="35.879801000" lon="-121.498947000">
+  <name>SANMRT01</name>
+  <cmt>SANMRT01</cmt>
+  <desc>SANMRT01</desc>
+</wpt>
+<wpt lat="35.652801000" lon="-121.308485000">
+  <name>PDRSBLNC</name>
+  <cmt>PDRSBLNC</cmt>
+  <desc>PDRSBLNC</desc>
+</wpt>
+<wpt lat="35.623297000" lon="-121.185920000">
+  <name>SNSMNENT</name>
+  <cmt>SNSMNENT</cmt>
+  <desc>SNSMNENT</desc>
+</wpt>
+<wpt lat="35.640478000" lon="-121.183772000">
+  <name>SNSMNANC</name>
+  <cmt>SNSMNANC</cmt>
+  <desc>SNSMNANC</desc>
+</wpt>
+<wpt lat="35.572353000" lon="-121.152797000">
+  <name>CAMBRIA</name>
+  <cmt>CAMBRIA</cmt>
+  <desc>CAMBRIA</desc>
+</wpt>
+<wpt lat="35.449214000" lon="-121.020825000">
+  <name>PTESTERO</name>
+  <cmt>PTESTERO</cmt>
+  <desc>PTESTERO</desc>
+</wpt>
+<wpt lat="35.216602000" lon="-120.928391000">
+  <name>PTBUCHON</name>
+  <cmt>PTBUCHON</cmt>
+  <desc>PTBUCHON</desc>
+</wpt>
+<wpt lat="34.883361000" lon="-120.684631000">
+  <name>PTSAL01</name>
+  <cmt>PTSAL01</cmt>
+  <desc>PTSAL01</desc>
+</wpt>
+<wpt lat="34.884641000" lon="-120.652026000">
+  <name>PTSALENT</name>
+  <cmt>A description of the Point Sal Entrance mark</cmt>
+  <desc>A description of the Point Sal Entrance mark</desc>
+</wpt>
+<wpt lat="34.896555000" lon="-120.649124000">
+  <name>PTSALANC</name>
+  <cmt>PTSALANC</cmt>
+  <desc>PTSALANC</desc>
+</wpt>
+<wpt lat="34.758180000" lon="-120.642516000">
+  <name>PURSMAPT</name>
+  <cmt>PURSMAPT</cmt>
+  <desc>PURSMAPT</desc>
+</wpt>
+<wpt lat="34.572579000" lon="-120.663636000">
+  <name>PTARGLLO</name>
+  <cmt>PTARGLLO</cmt>
+  <desc>PTARGLLO</desc>
+</wpt>
+<wpt lat="34.113844000" lon="-120.492630000">
+  <name>SANMGL01</name>
+  <cmt>SANMGL01</cmt>
+  <desc>SANMGL01</desc>
+</wpt>
+<wpt lat="34.029483000" lon="-120.471409000">
+  <name>SANMGL02</name>
+  <cmt>SANMGL02</cmt>
+  <desc>SANMGL02</desc>
+</wpt>
+<wpt lat="34.019184000" lon="-120.444197000">
+  <name>SANMGL03</name>
+  <cmt>SANMGL03</cmt>
+  <desc>SANMGL03</desc>
+</wpt>
+<wpt lat="34.023478000" lon="-120.438209000">
+  <name>ADCOVENT</name>
+  <cmt>ADCOVENT</cmt>
+  <desc>ADCOVENT</desc>
+</wpt>
+<wpt lat="34.028615000" lon="-120.439696000">
+  <name>ADCOVANC</name>
+  <cmt>ADCOVANC</cmt>
+  <desc>ADCOVANC</desc>
+</wpt>
+<rte>
+  <name>Into The Bay</name>
+  <rtept lat="37.763290" lon="-122.282580">
+    <name>SFBALBAY</name>
+  </rtept>
+  <rtept lat="37.751613" lon="-122.339028">
+    <name>SFBAY001</name>
+  </rtept>
+  <rtept lat="37.817420" lon="-122.394305">
+    <name>SFBAY002</name>
+  </rtept>
+  <rtept lat="37.819339" lon="-122.478302">
+    <name>SFGGBRDG</name>
+  </rtept>
+  <rtept lat="37.773033" lon="-122.605838">
+    <name>SFCHNL01</name>
+  </rtept>
+  <rtept lat="37.518860" lon="-122.529914">
+    <name>HMCOLREF</name>
+  </rtept>
+  <rtept lat="37.482348" lon="-122.507704">
+    <name>HMPILL01</name>
+  </rtept>
+  <rtept lat="37.475062" lon="-122.488531">
+    <name>HMPILLPT</name>
+  </rtept>
+  <rtept lat="37.476448" lon="-122.475800">
+    <name>HMPILL02</name>
+  </rtept>
+</rte>
+</gpx>
index cba457c9aa3696e643b44650697a003738fabbd6..82658b27cf5a27c6f4c33f3d78448d61a791493c 100755 (executable)
@@ -401,6 +401,12 @@ ${PNAME} -i navicache -f reference/navicache.xml -o gpsutil -F ${TMPDIR}/navi.wp
 compare ${TMPDIR}/navi.wpt reference/navicache.ref
 #
 
+#
+# CoastalExplorer..
+${PNAME} -i coastexp -f reference/coastexp.nob -o gpx -F ${TMPDIR}/coastexp.gpx
+compare ${TMPDIR}/coastexp.gpx reference/coastexp.ref
+#
+
 # PsiTrex.  A text format that can't be handled by XCSV due to context of
 # data based on other data values in the file
 # Waypoints first
index 0438d05d2f586571057d573e76c1631d7fb1f4d9..0229ebc3b99964f40f7e7823a17703945deca75e 100644 (file)
@@ -55,6 +55,7 @@ extern ff_vecs_t quovadis_vecs;
 extern ff_vecs_t gpilots_vecs;
 extern ff_vecs_t saroute_vecs;
 extern ff_vecs_t navicache_vecs;
+extern ff_vecs_t coastexp_vecs;
 extern ff_vecs_t psit_vecs;             /* MRCB */
 extern ff_vecs_t shape_vecs;
 extern ff_vecs_t geoniche_vecs;
@@ -224,6 +225,12 @@ vecs_t vec_list[] = {
                "Navicache.com XML",
                NULL
        },
+       {
+               &coastexp_vecs,
+               "coastexp",
+               "CoastalExplorer.com XML",
+               NULL
+       },
        {       /* MRCB */
                &psit_vecs,
                "psitrex",